<script>
  //打乱数组
  function shuffle(someArray) {
    // 你的代码
    return [...someArray].sort(() => Math.random() - 0.5)
    // sort 回调函数形式：
    /*
      function(a, b) {
        if (a>b) return 1
        if (a<b) return -1
        return 0
      }

      function (a, b) { return a - b}
    */
    // Math.random() 0-1小数
  }

  console.log(shuffle([10, 12, 15])) // [12, 15, 10]

  //按示例合并数组
  function mix(firstArray, secondArray) {
    const len =
      firstArray.length > secondArray.length
        ? firstArray.length
        : secondArray.length
    return [...Array(len)].reduce((ret, _, i) => {
      if (i < firstArray.length) {
        ret.push(firstArray[i])
      }
      if (i < secondArray.length) {
        ret.push(secondArray[i])
      }
      return ret
    }, [])
  }

  console.log(mix([1, 2, 3], [4, 5, 6])) // [1, 4, 2, 5, 3, 6]
  console.log(mix(['h', 'a', 'c', 'x'], [7, 4, 17, 10, 48])) // ["h", 7, "a", 4, "c", 17, 10, 48]

  //按求和排序
  function orderBySum(someArray) {
    // 你的代码
    return [...someArray].sort(([a0, a1], [b0, b1]) => a0 + a1 - (b0 + b1))
  }

  console.log(
    orderBySum([
      [1, 3],
      [4, 2],
      [2, 1],
    ])
  ) // [[2,1], [1,3], [4,2]]

  //找到只出现一次的字符
  // indexOf
  // lastIndexOf
  // arr.indexOf('a') // 0
  // arr.lastIndexOf('a') // 3
  function findOddOneOut(someArray) {
    return someArray.filter(
      (item) => someArray.indexOf(item) === someArray.lastIndexOf(item)
    )
  }

  console.log(findOddOneOut(['a', 'a', 'b', 'a', 'c'])) // ['b', 'c']

  //找到数组的最小值和最大值
  function findSmallestAndLargestNumbers(someArray) {
    return [Math.min(...someArray), Math.max(...someArray)]
  }

  console.log(findSmallestAndLargestNumbers([14, 28, 3, 8, 2]))
  // [2, 28]

  // 按示例转换数组
  function splitByOddAndEven(someArray) {
    return [
      someArray.filter((n) => n % 2 === 0),
      someArray.filter((n) => n % 2 !== 0),
    ]
  }

  console.log(splitByOddAndEven([2, 3, 7, 6, 2, 4, 9]))
  // [[2, 4, 6], [3, 7, 9]]

  //只保留出现过一次的数据
  function onlyUnique(someArray) {
    // 你的代码
  }

  console.log(onlyUnique([1, 1, 2, 3, 3, 4, 4, 5])) // [2, 5]

  //数组排序按字母顺序（注意行也要排序）
  function alphabetize(someArray) {
    // const fn = (a, b) => (a > b ? 1 : a === b ? 0 : -1)
    return someArray.map((arr) =>[...arr].sort()).sort()
  }

  var jumbledAlphabet = [
    ['e', 'd', 'f'],
    ['a', 'c', 'b'],
    ['m', 'o', 'n'],
  ]
  console.log(alphabetize(jumbledAlphabet))
  // [["a", "b", "c"], ["d", "e", "f"], ["m", "n", "o"]]

  //找到两个数组里都出现的值
  function findCommonWords(firstArray, secondArray) {
    return secondArray.filter(a => firstArray.indexOf(a) > -1)
  }

  var firstArray = ['🐶', '🐱', '🦜']
  var secondArray = ['🦎', '🐭', '🐱']
  console.log(findCommonWords(firstArray, secondArray)) // ["cat"]

  //判断第一个数组是否包含第二个数组的所有元素
  function containsAllElements(firstArray, secondArray) {
    return findCommonWords(firstArray,secondArray).length ===
              secondArray.length
    return secondArray.every((a) => firstArray.indexOf(a) > -1)
  }

  console.log(containsAllElements(['monday', 'tuesday'], ['tuesday'])) // true

  //排序，数字在字母前
  function sortTheArray(someArray) {
    return [
      ...someArray.filter(item => typeof item === 'number').sort(),
      ...someArray.filter(item => typeof item === 'string').sort(),
    ]
  }

  console.log(sortTheArray(['0', 26, 'a', 'q', 7, 2]))
  // [2, 6, 7, "a", "b", "q"]

  //用指定index取出数据成为新数组
  function buildArray(someArray, indexes) {
    return indexes.map(index => someArray[index])
  }

  console.log(buildArray(['mon', 'tue', 'wed', 'thur', 'fri'], [1, 3, 4])) // ["tue", "thur", "fri"]

  /*
    电影票问题

    一张电影票25元，
    纸币3种面额 25 50 100
    我去做售票员，不带任何零钱
    观众来排队买票（人数未知），每个人带一张钞票，不能交流，不能换排队顺序
    每人只能买一张票
    判断一队人是否都能买到票
  */
</script>
